#include <jni.h>
#include <string>

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_hellondk_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    std::string hello = "Hello from C++";
    return env->NewStringUTF(hello.c_str());
}

// extern "C": 这确保 C++ 编译器不会对函数名进行 "name mangling"，这样 JNI 才能正确找到函数。
// JNIEXPORT 和 JNICALL: 这些宏指示函数是一个 JNI 函数，可以被 Java 调用。
// 函数签名: JNI 函数的命名约定非常重要：
// Java_: 前缀
//  com_example_hellondk: 你的 Java 代码的包名，下划线代替点（.）。
//  MainActivity: 包含你要调用的方法的 Java 类的名称。
//  addNumbers: 你在 Java 中要调用的 C++ 方法的名称。
//  JNIEnv* env: 指向 JNI 环境的指针，用于访问 JNI 函数。
//  jobject /* this */: 指向 Java 对象的引用（类似于 Java 中的 this）。
// 参数: addNumbers 方法接收两个 jint 类型的参数，对应于 Java 的 int 类型。
// 返回值: addNumbers 方法返回一个 jint 类型的值。 
extern "C" JNIEXPORT jint JNICALL
Java_com_example_hellondk_MainActivity_addNumbers(
        JNIEnv* env,
        jobject /* this */,
        jint a,
        jint b) {
    return a + b;
}